// 这里的vm，就是我们在vue文件里面的this，所以我们能在这里获取vuex的变量，比如存放在里面的token
// 同时，我们也可以在此使用getApp().globalData，如果你把token放在getApp().globalData的话，也是可以使用的
const install = (Vue, vm) => {
	Vue.prototype.$u.http.setConfig({
		// baseUrl: 'http://10.255.212.6',
		baseUrl: 'http://32v7r91942.zicp.vip',
		// 如果将此值设置为true，拦截回调中将会返回服务端返回的所有数据response，而不是response.data
		// 设置为true后，就需要在this.$u.http.interceptor.response进行多一次的判断，请打印查看具体值
		originalData: true, 
		loadingText: '加载中~',
		loadingTime: 800,
		loadingMask: true,
		header:{
			'Authorization':'bearer '+ vm.access_token
		}
	});
	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (config) => {
		// config.header.Authorization = 'bearer ' + vm.access_token;
		//对请求进行拦截，判断请求类型
		//如果是认证请求，将请求头中的Authorization设置为客户端认证信息
		
		// if (config.url.indexOf('http://api.map.baidu.com') !== -1) {
		// 	console.log('地图')
		// }
		
		/**
		 * 如果 access_token 为空 则尝试刷新 否则直接返回
		 */
		
		console.log('预检',vm.access_token)
		if (vm.access_token === '' && config.url !== '/auth/oauth/token') {
			let lifeData = uni.getStorageSync('lifeData')
			console.log('正在尝试refresh')
			
			// if (lifeData.refresh_token === '') {
			// 	return
			// }
			
			let params = {
				'grant_type': 'refresh_token',
				'scope': 'server',
				'refresh_token': lifeData.refresh_token
			}
			vm.$u.post('/auth/oauth/token', params).then(res => {
				console.log(res)
				vm.$u.vuex('access_token', res.access_token)
				vm.$u.vuex('refresh_token', res.refresh_token)
				
				if (config.url === '/act/clock/getDeptSimpleInfo' ||
				   config.url === '/act/userLeave/revoke' ||
				   config.url === '/act/task/leave/refuseTask' || 
				   config.url === '/act/enter/save' || 
				   config.url === '/act/clock/save' ||
				   config.url === '/act/clock/getPageRecords') {
					
						config.header['Content-Type'] = 'application/json'
				} 
				
				config.header.Authorization = 'bearer '+ res.access_token
				return config
			})
			
			
		}else {
			if(config.url === '/auth/oauth/token'){
				config.header['Content-Type'] = 'application/x-www-form-urlencoded'
				config.header.Authorization = 'Basic YXBwOmFwcA=='
				return config
			} else if (config.url === '/act/clock/getDeptSimpleInfo' ||
					   config.url === '/act/userLeave/revoke' ||
					   config.url === '/act/task/leave/refuseTask' || 
					   config.url === '/act/enter/save' || 
					   config.url === '/act/clock/save' ||
					   config.url === '/act/clock/getPageRecords') {
				config.header['Content-Type'] = 'application/json'
			} 
			
			config.header.Authorization = 'bearer '+vm.access_token
			return config
					
		}
		
	}
	// 响应拦截，判断状态码是否通过
	Vue.prototype.$u.http.interceptor.response = (res) => {
		if(res.statusCode == 200) {
				// 这里对res.result进行返回，将会在this.$u.post(url).then(res => {})的then回调中的res的到
				// 如果配置了originalData为true，请留意这里的返回值
				return res.data;
		} else if(res.statusCode == 401) {
			// 假设401为token失效
			// 将access_token设为空值
			vm.$u.vuex('access_token','') 
			
			
			// 失效先考虑刷新令牌
			let lifeData = uni.getStorageSync('lifeData')
			
			let params = {
				'grant_type': 'refresh_token',
				'scope': 'server',
				'refresh_token': lifeData.refresh_token
			}
			vm.$u.post('/auth/oauth/token', params).then(res => {
				console.log(res)
				vm.$u.vuex('access_token', res.access_token)
				vm.$u.vuex('refresh_token', res.refresh_token)
				vm.$u.toast('登录已刷新,请重试~')
			}).catch(err => {
				console.log(err)
				vm.$u.toast('登录已过期,请登录~')
			})
			
			
			
			
			
			
			return false;
		} else {
			// 如果返回false，则会调用Promise的reject回调，
			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
			return false;
		}
		
	}
}

export default {
	install
}